package com.cgcallback;

import com.service.UserService;
import com.service.impl.UserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;
@Slf4j
public class UserCallback implements MethodInterceptor {

    private UserService target;

    public UserCallback(UserService userService) {
        this.target=userService;
    }

    @Override
    public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {

        log.debug("CGLib 代理之前");

//        使用方法反射调用目标对象的方法
        Object result = method.invoke(target, args);

//        使用 methodProxy 参数可以避免反射调用，需要目标对象（spring使用的方式）
        methodProxy.invoke(target,args);

//        使用 methodProxy 参数可以避免反射调用，需要自己
        methodProxy.invokeSuper(o,args);

        log.debug("CGLib 代理之后");
        return result;
    }
}
